import store from "@/store";

const TIME_OUT = 60000
const BASE_URL = "https://pcapi-xiaotuxian-front-devtest.itheima.net"

class MyRequest{
	request(url, method, data){
		return new Promise((resolve, reject) => {
			uni.request({
				url: BASE_URL + url,
				method: method || "GET",
				timeOut: TIME_OUT,
				data,
				success(res){
					resolve(res.data)
				},
				fail(err){
					reject(err)
				}
			})
		})
	}
	
	get(url, params){
		return this.request(url, "GET", params)
	}
	
	post(url, data){
		return this.request(url, "POST", data)
	}
	
	put(url, data){
		return this.request(url, "put", data)
	}
	
	delete(url, data){
		return this.request(url, "delete", data)
	}
}

// 拦截器配置
const httpInterceptor = {
  // 拦截前触发
  invoke(options) {
    // 1. 非 http 开头需拼接地址
    if (!options.url.startsWith('http')) {
      options.url = baseURL + options.url
    }
    // 2. 请求超时
    options.timeout = 10000
    // 3. 添加小程序端请求头标识
    options.header = {
      'source-client': 'miniapp',
      ...options.header,
    }
    // 4. 添加 token 请求头标识
    const token = store.state.login.token
    if (token) {
      options.header.Authorization = token
    }
  },
}

// 拦截 request 请求
uni.addInterceptor('request', httpInterceptor)
// 拦截 uploadFile 文件上传
uni.addInterceptor('uploadFile', httpInterceptor)

export default new MyRequest()